
// 导入db模块
const db = require("../db/index")

// 用于加密密码
const bcrypt = require('bcrypt');

// 用于jwt生成token 的秘钥
const jwtSecretKey = require("../config")

// 用于生成jwttoken字符串
const jwt = require("jsonwebtoken")
// 用于解密jwt字符串
// const expressJwt = require("express-jwt")

// 注册路由的路由函数
exports.regUser = (req, res) => {
    // 获取客户端发送的请求数据
    let userInfo = req.body
    console.log(userInfo);
    // 判断用户名或密码是否为空，为空不合法
    if (!userInfo.username || !userInfo.password) {
        return res.send({
            status: 400,
            message: "用户名或密码不能为空！"
        })
    }

    // 查询数据库看下username是否是已经存在.若存在返回警告,不存在正常执行
    let SearchSqlStr = 'SELECT * FROM ev_users where username = ?'

    db.query(SearchSqlStr, userInfo.username, (err, result) => {
        // sql查询报错
        if (err) {
            // return res.send({
            //     status: 400,
            //     message: err.message
            // })
            res.cc(err)
        }
        // 用户名已存在
        if (result.length > 0) {
            // res.send({
            //     statut: 400,
            //     message: "用户名已存在，请重新输入用户名！"
            // })
            res.cc("用户名已存在，请重新输入用户名！")
        }
        // 用户名可以使用
        // 对密码进行加密处理再保存到数据库中
        userInfo.password = bcrypt.hashSync(userInfo.password, 10)

        // 将用户信息保存到数据库中
        const saveSqlStr = 'insert into ev_users set ? '

        db.query(saveSqlStr, { username: userInfo.username, password: userInfo.password }, (err, result) => {
            // sql语句执行失败
            // if (err) res.send({ status: 400, message: err.message })
            if (err) res.cc(err)

            // if (result.affectedRows !== 1) return res.send({ status: 400, message: "注册失败，请稍后再试！" })
            if (result.affectedRows !== 1) return res.cc("注册失败，请稍后再试！")

            // res.send({ status: 200, message: "创建用户成功" })
            res.cc("创建用户成功", 200)
        })
    })

    // res.send() 之后的代码不再执行
}

// 登录路由的路由函数
exports.login = (req, res) => {

    let userInfo = req.body
    console.log("userInfo", userInfo);
    // 用户输入的账号数据库中是否存在
    let sqlStr = 'select * from ev_users where username = ?'

    // 查询数据库返回查询结果
    db.query(sqlStr, userInfo.username, (err, result) => {
        console.log("result", result);
        // 查询失败,
        if (err) return res.cc(err)

        // 查询出来结果不是一个
        if (result.length !== 1) return res.cc(400, "用户名不存在,请输入正确的用户名")

        // 账户名正确的情况下校验密码
        // 定义密码比较
        let compareResult = bcrypt.compareSync(userInfo.password, result[0].password)
        // 比较密码,不一样返回密码错误，一样返回jwt token字符串
        if (!compareResult) return res.cc(400, "密码错误，请重新输入")

        // 定义jwt字符串
        // 使用es6 ... 剔除掉password和user_pic 
        const user = { ...result[0], password: '', user_pic: '' }
        console.log("jwtSecretKey", jwtSecretKey.jwtSecretKey);
        // 生成jwt加密的token 字符串
        const tokenStr = jwt.sign(user, jwtSecretKey.jwtSecretKey, { expiresIn: "10h" })
        console.log("tokenStr", tokenStr);
        res.send({
            status: 200,
            message: "登录成功",
            token: 'Bearer ' + tokenStr
        })
    })
    // console.log(req.body);
    // res.send("login ok")
}